package com.yqs.servlet; /**
 * @author Ye QS
 * @className ${NAME}
 * @description ${description}
 * @version 0.1
 * @date 2024/8/2 14:11
 * @since jdk11
 */

import com.yqs.entity.Dept;
import com.yqs.entity.Emp;
import com.yqs.mapper.EmpMapper;
import com.yqs.utils.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * EmpAddServlet 类用于处理员工的添加操作。
 *
 * @author Ye QS
 * @version 0.1
 * @date 2024/8/2 14:11
 * @since jdk11
 */
@WebServlet("/EAS")
public class EmpAddServlet extends HttpServlet {

    /**
     * 处理POST请求，实现员工的添加功能。
     *
     * @param req HttpServletRequest对象，包含客户端的请求信息
     * @param resp HttpServletResponse对象，用于构造响应
     * @throws ServletException 可能抛出的Servlet异常
     * @throws IOException 可能抛出的IO异常
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取SqlSession对象，它是MyBatis中用于执行数据库操作的对象
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
        try {
            // 通过SqlSession获取EmpMapper接口的实例，用于访问数据库中的员工数据
            EmpMapper mapper = session.getMapper(EmpMapper.class);
            // 从请求中获取员工姓名
            String empName = req.getParameter("empName");
            // 从请求中获取员工工资，并转换为Double类型
            Double salary = Double.parseDouble(req.getParameter("salary"));
            // 从请求中获取员工入职日期字符串，并定义日期格式化器
            String hireDateString = req.getParameter("hireDate");
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date hireDate = null;
            try {
                // 尝试将日期字符串转换为Date对象
                hireDate = dateFormat.parse(hireDateString);
            } catch (ParseException e) {
                // 如果日期转换失败，抛出运行时异常
                throw new RuntimeException(e);
            }
            // 从请求中获取部门ID，并转换为Integer类型
            Integer deptId = Integer.parseInt(req.getParameter("deptId"));
            // 创建Dept对象并设置部门ID
            Dept dept = new Dept();
            dept.setDeptId(deptId);
            // 创建Emp对象并设置员工信息
            Emp emp = new Emp();
            emp.setEmpName(empName);
            emp.setSalary(salary);
            emp.setHireDate(hireDate);
            emp.setDept(dept);
            // 调用EmpMapper的addEmp方法添加员工信息到数据库
            int i = mapper.addEmp(emp);
            // 根据添加操作的返回值判断是否添加成功，并进行相应跳转
            if (i > 0) {
                System.out.println("新增成功");
                resp.sendRedirect("fuzzyEmpList.html"); // 重定向到员工列表页面
            } else {
                System.out.println("新增失败");
                resp.sendRedirect("addEmp.html"); // 重定向到添加员工页面
            }
        } finally {
            // 确保SqlSession在操作完成后关闭，释放数据库资源
            session.close();
        }
    }

    /**
     * 处理GET请求，由于此Servlet主要处理表单提交，GET请求通常重定向到POST请求。
     *
     * @param req HttpServletRequest对象
     * @param resp HttpServletResponse对象
     * @throws ServletException 可能抛出的Servlet异常
     * @throws IOException 可能抛出的IO异常
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}